package priv.menghan.happy.learning.common.util;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

/**
 * 分页工具类，用于从请求对象中提取分页参数并生成 Page 对象。
 *
 * @author Monika
 * @since 2025/6/10
 */
public class PageUtils {

	/**
	 * 创建分页对象，默认每页 10 条记录
	 *
	 * @param req 请求参数对象（需包含 current 和 size 字段）
	 * @return IPage<T> 分页参数对象
	 */
	public static <T> IPage<T> createPage(Object req) {
		return createPage(req, 10);
	}

	/**
	 * 创建分页对象
	 *
	 * @param req             请求参数对象（需包含 current 和 size 字段）
	 * @param defaultPageSize 默认每页条数
	 * @return IPage<T> 分页参数对象
	 */
	public static <T> IPage<T> createPage(Object req, int defaultPageSize) {
		Long current = getFieldValue(req, "current");
		Long size = getFieldValue(req, "size");

		long pageNum = current == null || current <= 0 ? 1 : current;
		long pageSize = size == null || size <= 0 ? defaultPageSize : size;

		return new Page<>(pageNum, pageSize);
	}

	/**
	 * 使用反射获取字段值
	 */
	@SuppressWarnings("unchecked")
	private static <T> T getFieldValue(Object obj, String fieldName) {
		try {
			var field = obj.getClass().getDeclaredField(fieldName);
			field.setAccessible(true);
			return (T) field.get(obj);
		} catch (Exception e) {
			return null;
		}
	}
}

